package main

/**
实现pow(x,n)，即计算 x 的 n 次幂函数（即，xn）。不得使用库函数，同时不需要考虑大数问题。

示例 1
输入：x = 2.00000, n = 10
输出：1024.00000

示例 2：
输入：x = 2.10000, n = 3
输出：9.26100

示例 3：
输入：x = 2.00000, n = -2
输出：0.25000
解释：2-2 = 1/22 = 1/4 = 0.25

提示：
-100.0 <x< 100.0
-231<= n <=231-1
-104<= xn<= 104
	快速幂
*/
func myPow(x float64, n int) float64 {
	if n == 0 {
		return 1
	}
	res := 1.0
	//因为测试用例中有-2147483648  超过了int32的最小值 即-2147483647 - 2147483648  符号位占一位
	b := int64(n)

	if b < 0 {
		x = 1 / x
		b = -b
	}

	for b > 0 {
		if b&1 == 1 { //二进制最后一位为1时即奇数，将待乘数乘以x
			res *= x
		}
		x *= x //二进制最后一位为1时即偶数，将底数平方
		b >>= 1

	}
	return res
}

func main() {

}
